package com.ktjy.mapper;

import java.lang.reflect.Method;

public class AccessPersonMethods {
    public static void main(String[] args) {
        try {
            Class clz = Class.forName("com.ktjy.mapper.Person");

            //根据方法名和参数列表获取static final int getAge()方法，
            //没有参数可以不写或null表示
            Method getAge = clz.getDeclaredMethod("getAge",null);
            //getAge方法为default(package),这里已超出其访问范围，不能直接访问
            //通过setAccessable方法，设定为可以访问
            getAge.setAccessible(true);
            //调用getAge方法并传参，没有参数可以不写或用null表示
            //getAge方法为静态方法，调用时可以指定具体Person实例
            Object returnAge = getAge.invoke(null,null);
            System.out.println("年龄是："+returnAge);

            Object person = clz.newInstance();//创建Person

            //
            //没有参数可以不写或null表示
            Method silentMethod = clz.getDeclaredMethod("silentMethod",null);
            //
            //
            silentMethod.setAccessible(true);//
            //
            silentMethod.invoke(person,null);

            //
            Method setName = clz.getDeclaredMethod("setName",String.class);
            //
            //
            setName.invoke(person,"New Person");
            //
            Object returnName = clz.getDeclaredMethod("getName").invoke(person);
            System.out.println("刚才设定的name是："+returnName);
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}
